Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

 << zurück
Visual C# 2005 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2005

Visual C# 2005
1.320 S., mit 2 CDs, 59,90 Euro
Galileo Computing
ISBN 3-89842-586-X
gp Kapitel 15 Grundlagen zum Erstellen einer Windows-Anwendung
  gp 15.1 Die Entwicklungsumgebung
  gp 15.2 Eine erste Windows-Anwendung
  gp 15.3 Das Codegerüst einer Windows-Anwendung
    gp 15.3.1 Die Datei »Program.cs«
    gp 15.3.2 Die Dateien »Form1.cs« und »Form1.Designer.cs«
  gp 15.4 Ereignisse grafischer Windows-Komponenten
    gp 15.4.1 Grundlegende Anmerkungen
    gp 15.4.2 Ereignisse mit Ereignisdaten
    gp 15.4.3 Ereignishandler mit dem Visual Studio 2005 bereitstellen
    gp 15.4.4 Ereignisbehandlung mit den »OnXxx«-Methoden
  gp 15.5 Die Basisklassen einer Form
    gp 15.5.1 Die Klasse »Control«
    gp 15.5.2 Die Klasse »ScrollableControl«
    gp 15.5.3 Die Klasse »ContainerControl«
  gp 15.6 Die Eigenschaften einer Form
    gp 15.6.1 Die Rahmendarstellung einer Form
    gp 15.6.2 Formspezifisches Symbol festlegen
    gp 15.6.3 Die Schaltflächen in der Titelleiste
    gp 15.6.4 Spielereien mit »Opacity« und »TransparencyKey«
    gp 15.6.5 Fenster, die nicht verdeckt werden können
    gp 15.6.6 Den Mauszeiger verändern
    gp 15.6.7 Farbeinstellungen mit dem Typ »Color«
    gp 15.6.8 Schriftart mit dem Typ »Font«
    gp 15.6.9 Die Abmessungen einer Form festlegen
    gp 15.6.10 Die Position eines Fensters
    gp 15.6.11 Der Anzeigezustand eines Fensters nach dem Öffnen
    gp 15.6.12 Die Arbeitsfläche des Fensters (der Clientbereich)
    gp 15.6.13 Die Auflistung »ControlsCollection«
    gp 15.6.14 Zusammenfassung der Eigenschaften des Form-Objekts
  gp 15.7 Ereignisse einer Form
    gp 15.7.1 Ereignisse beim Erzeugen eines Fenster
    gp 15.7.2 Größenänderung einer Form
    gp 15.7.3 Ereignisse beim Schließen eines Fensters
  gp 15.8 Anwendungen mit mehreren Fenstern
    gp 15.8.1 Neue Forms hinzufügen
    gp 15.8.2 Formulare laden, anzeigen, verstecken und schließen
    gp 15.8.3 Mehrere Fenster verwalten
    gp 15.8.4 Formulare in einem eigenen Thread laufen lassen
    gp 15.8.5 Splash-Fenster
  gp 15.9 Modale Dialogfenster
    gp 15.9.1 Layout eines Dialogfensters
    gp 15.9.2 Die Eigenschaft »DialogResult«
    gp 15.9.3 Eine Form modal öffnen
    gp 15.9.4 Die Weitergabe von Resultaten aus einem Dialog
    gp 15.9.5 Dialoge mit einer »Übernehmen«-Schaltfläche
    gp 15.9.6 Fokussierreihenfolge und Standardschaltflächen
  gp 15.10 Meldungsfenster mit »MessageBox«
    gp 15.10.1 Die Methode »MessageBox.Show«
    gp 15.10.2 Der Rückgabewert der Meldungsfenster
  gp 15.11 Das Speichern in der Registrierungsdatenbank
    gp 15.11.1 Die Klassen »Registry« und »RegistrKey«
    gp 15.11.2 Programmbeispiel zum Speichern in der Registrierung
  gp 15.12 Die Klasse »Application«
    gp 15.12.1 Die Datei »AssemblyInfo.cs«
    gp 15.12.2 Mit »Application.DoEvents« wartende Ereignisse abrufen
    gp 15.12.3 Zusammenfassung Eigenschaften und Methoden


Galileo Computing

15.6 Die Eigenschaften einer Fordowntop

Viele Eigenschaften ermöglichen nicht nur die Änderung des Aussehens einer Form, viele beeinflussen auch deren Verhalten zur Laufzeit. In den folgenden Abschnitten möchte ich Ihnen die wichtigsten Eigenschaften vorstellen. Hier alle zu erwähnen oder gar detailliert zu erläutern, würde den Rahmen doch ein wenig sprengen, denn dazu gibt es einfach zu viele. Das Eigenschaftsfenster lädt geradezu dazu ein, mit den einzelnen Eigenschaften zu experimentieren.

Eigenschaften, die sich sofort beim Erzeugen eines Fensters auf die Ausgabe der Form auswirken sollen, stellen Sie sinnvollerweise im Eigenschaftsfenster ein. Manche Eigenschaften möchte man aber auch zur Laufzeit ändern, beispielsweise aufgrund geänderter Umgebungsbedingungen oder um die Interaktion zwischen Form und Anwender zu beeinflussen. Dann kann jede Eigenschaft, sofern sie nicht schreibgeschützt ist, auch mittels Programmcode eingestellt werden.


Galileo Computing

15.6.1 Die Rahmendarstellung einer Form  downtop

Zu den spezifischen Eigenschaften einer Form gehört FormBorderStyle. Die Einstellung dieser Eigenschaft legt fest, wie der Rahmen zur Laufzeit dargestellt wird, beispielsweise ob er eine fixe Größe hat oder vom Anwender verändert werden kann. Die Eigenschaft ist vom gleichnamigen Typ der Aufzählung FormBorderStyle, die zum Namespace System.Windows.Forms gehört. Diese Aufzählung stellt die in der folgenden Tabelle aufgeführten Konstanten bereit.


Tabelle 15.4   Einstellungen der Eigenschaft »FormBorderStyle«

FormBorderStyle-Mitglied Beschreibung
Fixed3D Der Rahmen erscheint in dreidimensionaler Darstellung. Die Größe der Form kann nicht verändert werden.
FixedDialog Zeigt den Rahmen eines Dialogfensters ohne Systemmenüfeld. Die Größe der Form kann nicht verändert werden.
FixedSingle Zeigt den Rahmen eines Dialogfensters mit Systemmenüfeld. Die Größe der Form kann nicht verändert werden.
FixedToolWindow Zeigt ein Toolfenster mit schmaler Titelleiste, ohne Min- und Max-Schaltfläche sowie ohne Systemmenüfeld. Die Größe der Form kann nicht verändert werden.
None Die Form zeigt weder Rahmen noch Titelleiste.
Sizable Zeigt die Form in einem Standardrahmen, dessen Größe verändert werden kann.
SizableToolWindow Zeigt ein Toolfenster mit schmaler Titelleiste, ohne Min- und Max-Schaltfläche sowie ohne Systemmenüfeld. Die Größe des Fensters kann verändert werden.

Das Hauptfenster einer Anwendung wird in den meisten Fällen die Einstellung Sizable haben. Häufig wird diese Einstellung auch bei Forms verwendet, die einen variablen Dokumenteninhalt anzeigen. Auf FixedSingle oder FixedDialog fällt die Wahl, wenn im Formular Einstellungen vorzunehmen sind, die Auswirkung auf die Darstellung eines Dokuments haben oder das Anwendungsverhalten beeinflussen. Fenster unveränderlicher Größe werden auch als Dialogfenster bezeichnet. Ein typisches Beispiel dazu finden Sie in der Entwicklungsumgebung unter Extras · Optionen. Mit der Entwicklung von Dialogfenstern befassen wir uns in Abschnitt 15.9.

Toolfenster stellen Werkzeuge bereit und haben die Einstellung FixedToolWindow oder SizableToolWindow. Mehrere Beispiele solcher Forms hat auch die Entwicklungsumgebung von Visual Studio 2005 zu bieten: die Toolbox und der Projektmappen-Explorer, um nur zwei zu nennen.


Galileo Computing

15.6.2 Formspezifisches Symbol festlegen  downtop

Was man auf keinen Fall versäumen sollte, ist die Festlegung eines formspezifischen Symbols in der linken Ecke der Titelleiste, denn das standardmäßige sieht nicht besonders professionell aus. Dazu weisen Sie der Eigenschaft Icon das gewünschte Symbol zu. Sie können dazu auf Icons zurückgreifen, die mit Visual Studio 2005 als gezippte Datei (VS2005ImageLibrary.zip) ausgeliefert werden. Die Datei ist im Ordner

\Programme\Microsoft Visual Studio 8\Common7\VS2005ImageLibrary

zu finden sind (vorausgesetzt, Sie haben bei der Installation des Visual Studio 2005 den Standardinstallationspfad übernommen und nicht durch einen eigenen ersetzt).


Galileo Computing

15.6.3 Die Schaltflächen in der Titelleiste  downtop

Standardmäßig werden am rechten Ende der Titelleiste drei Schaltflächen angeboten, um die Form zu minimieren, zu maximieren oder zu schließen. Manchmal ist es nicht erwünscht, dass zur Laufzeit ein Fenster bildschirmfüllend angezeigt oder minimiert in die Taskleiste gelegt wird. Das ist beispielsweise bei Dialogfenstern der Fall. Mit den beiden Eigenschaften MinimizeBox und MaximizeBox kann die Anzeige der beiden Schaltflächen beeinflusst werden.

Diese Eigenschaften können entweder true oder false sein. Der Standard ist true und zeigt die entsprechende Schaltfläche aktiviert in der Titelleiste. Mit false kann jede der beiden Schaltfläche einzeln deaktiviert werden. Eine Voraussetzung muss aber noch erfüllt sein, um eine Form auch tatsächlich minimiert in die Taskleiste legen zu können: Die Eigenschaft ShownInTaskbar der Form muss auf true eingestellt sein. Das ist auch gleichzeitig der Standard. false bewirkt zwar ebenfalls das Minimieren der Form, das Symbol für die Form wird dann jedoch oberhalb der Taskleiste abgelegt.

Ein etwas drastischeres Verhalten zeigt die Eigenschaft ControlBox. Ist sie auf false gesetzt, werden nicht nur die drei Schaltflächen am rechten Ende der Titelleiste ausgeblendet, sondern darüber hinaus auch das Systemmenüfeld der Form. Um die Form zu schließen, sollten Sie dem Anwender dann unbedingt eine entsprechende Schließen-Schaltfläche zur Verfügung stellen.


Galileo Computing

15.6.4 Spielereien mit »Opacity« und »TransparencyKey«  downtop

Eine nette Spielerei und in der Praxis kaum von größerem Nutzen ist die Einstellung der Transparenz mit Opacity, die zwischen 0  % (vollständige Transparenz, d.  h., das Fenster einschließlich aller Komponenten ist unsichtbar) stufenlos bis 100  % (= deckend) eingestellt werden kann. Immerhin scheinen sich in den jüngsten Microsoft-Produkten immer mehr auch solche visuellen Darstellungen zu etablieren. Haben Sie beispielsweise Outlook 2003 installiert, wird in einem halbtransparentem Fenster der Eingang einer neuen Mail signalisiert.

Sehr ähnlich funktioniert auch TransparencyKey. Dieser Eigenschaft übergeben Sie eine Farbe vom Typ Color. Jedes Pixel des Fensters oder eines seiner Komponenten, das exakt dieser Farbe entspricht, ist dann transparent. Sollte die Maus zufälligerweise auf ein transparentes Pixel treffen, werden die Mausereignisse nicht ausgelöst.


Hinweis   Sollten Sie Spaß am Experimentieren haben und den Effekt der beiden Eigenschaften Opacity und TransparencyKey testen wollen, müssen Sie unter den Betriebssystemen Windows 2000, Windows XP oder Windows Server 2003 arbeiten. Alle anderen Betriebssysteme unterstützen diese Eigenschaften nicht.


Galileo Computing

15.6.5 Fenster, die nicht verdeckt werden können  downtop

Es gibt Fenster, die auch dann als oberstes einer Anwendung angezeigt werden, wenn sie nicht aktiviert sind. Typische Vertreter sind beispielsweise die Dialoge Suchen und Ersetzen, die in sehr vielen Anwendungen zu finden sind. Mit der Einstellung true der Eigenschaft TopMost erzielen Sie dieses Verhalten.


Galileo Computing

15.6.6 Den Mauszeiger verändern  downtop

Die Eigenschaft Cursor legt das Aussehen des Mauszeigers fest, wenn sich dieser über der Form oder einem Steuerelement bewegt. Mit


this.Cursor = Cursors.WaitCursor;

wird bei einer lang andauernden Operation der Mauszeiger als Sanduhr angezeigt. Damit signalisieren Sie dem Anwender, dass das System beschäftigt ist. Mit


this.Cursor = Cursors.Default;

schalten Sie nach der Beendigung der Operation wieder in die Standarddarstellung zurück.

Eine andere Alternative bietet die Eigenschaft UseWaitCursor. Dieser übergeben Sie true, um mit der Sanduhr einen länger dauernden Vorgang anzuzeigen, und setzen sie nach Abschluss der Operation auf false zurück, also:


this.UseWaitCursor = true; // zeigt die Sanduhr an
...
this.UseWaitCursor = false;// schaltet den Standardcursor ein

In der Klasse Cursors sind die Mausdarstellungen als statische Eigenschaften vordefiniert, die der Eigenschaft Cursor zugewiesen werden können. Die folgende Tabelle gibt nur einen kleinen Auszug aller Möglichkeiten wieder.


Tabelle 15.5    Einstellungen der Eigenschaft »Cursor« (Auszug)

Eigenschaft Beschreibung
Arrow Der Mauszeiger wird als Pfeil dargestellt.
Cross Der Mauszeiger wird als Fadenkreuz dargestellt.
Default Der Mauszeiger wird als Pfeil dargestellt (entspricht der Einstellung Arrow).
WaitCursor Der Mauszeiger wird als Sanduhr dargestellt.


Galileo Computing

15.6.7 Farbeinstellungen mit dem Typ »Color«  downtop

In Kapitel 22 dieses Buches werden wir uns mit der Grafikprogrammierung beschäftigen. In diesen Themenkreis fällt auch die Definition von Farben und Fonts. Bis dahin haben wir aber nicht nur die Form, sondern auch bereits alle wichtigen Steuerelemente behandelt. Farben und Schriftarten sind aber elementar bei fast allen Windows-Komponenten. Daher müssen wir uns schon an dieser Stelle die wichtigsten Aspekte der beiden Typen Color und Font ansehen, die beide zum Namespace System.Drawing gehören.

Farbeigenschaften wie BackColor zur Einstellung der Hintergrundfarbe und ForeColor für die Vordergrundfarbe (entspricht der Zeichen- bzw. Schriftfarbe) sind vom Typ der Struktur Color. Ein Blick in die Dokumentation dieser Struktur verrät uns, dass Color nur über einen parameterlosen Standardkonstruktor verfügt:


Color myColor = new Color();

Diesen Konstruktor einzusetzen, ist wenig sinnvoll, weil er nur ein transparentes Schwarz beschreibt, das als »leere« Farbe wahrgenommen wird. Sinnvoller ist es, auf eine der vordefinierten Farben zuzugreifen, die als statische, schreibgeschützte Eigenschaften veröffentlicht werden. Die folgende Tabelle enthält einen exemplarischen Auszug aus dieser Liste.


Tabelle 15.6   Farbkonstanten der Struktur »Color« (Auszug)

Color-Konstante Beschreibung
Black Schwarz
Blue Blau
Green Grün
Red Rot
White Weiß
Yellow Gelb

Sehr einfach sind Farben im Eigenschaftsfenster einzustellen. Soll die Form oder eine Komponente (soweit diese auch die Eigenschaften BackColor bzw. ForeColor aufweist) zur Laufzeit die Farbe wechseln, genügt eine einfache Anweisung, wie z.B.:


this.BackColor = Color.Blue;

Das Farbschema folgt dem ARGB-Modell (Alpha-Rot-Grün-Blau). Der Alpha-Kanal legt die Transparenz einer Farbe fest. Jeder der vier Kanäle kann durch einen 8-Bit-Wert, also zwischen 0 bis 255, beschrieben werden.

Um eine beliebige Farbe festzulegen, fehlt es an einem passenden Konstruktor. Die Strukturdefinition wäre unvollständig, wenn es nicht eine andere Alternative geben würde, eine Farbe innerhalb der 8-Bit-ARGB-Komponentenwerte festlegen zu können. Hier kommt die überladene statische Methode FromArgb ins Spiel, die jeweils ein Color-Objekt zurückliefert.

Mit der folgenden Anweisung könnten Sie beispielsweise die Hintergrundfarbe der aktuellen Form zur Laufzeit verändern:


this.BackColor = Color.FromArgb(100, 25, 180);

Die Einstellungen BackColor und ForeColor werden von allen Steuerelementen der Form per Vorgabe übernommen. Soll die Vorder- oder Hintergrundfarbe des Controls davon abweichen, müssen Sie das in der gleichnamigen Eigenschaft des Steuerelements einstellen.


Galileo Computing

15.6.8 Schriftart mit dem Typ »Font«  downtop

Die Eigenschaft Font, die vom gleichnamigen Typ Font ist, wirkt sich auf die Darstellung von Text aus, der im Arbeitsbereich einer Form ausgegeben wird. Außerdem wird diese Eigenschaft, wie auch BackColor und ForeColor, von allen untergeordneten Controls der Form übernommen. Font ändert jedoch nicht die Schriftdarstellung in der Titelleiste.

Einstellung im Eigenschaftsfenster

Zum Einstellen eines von der Vorgabe abweichenden Schriftstils markieren Sie im Eigenschaftsfenster Font und klicken auf die Schaltfläche mit den drei Punkten in der Wertespalte. Es öffnet sich ein Dialog, in dem Sie Ihre Änderungen durch Auswahl treffen.

Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 15.10   Dialog zum Einstellen der Eigenschaft »Font«

Öffnen Sie den Knoten von Font im Eigenschaftsfenster, können Sie auch einzelne Stile editieren, ohne dass der Dialog geöffnet werden muss.

Einstellen der Schrift im Programmcode

Die Einstellung im Eigenschaftsfenster ist ein Kinderspiel. Etwas schwieriger wird es, wenn Sie programmatisch die Font-Eigenschaft ändern müssen. Um einen vom Standard abweichenden Typ anzugeben, muss dazu ein neues Font-Objekt erzeugt werden, das von Anfang an die gewünschten Eigenschaften aufweist – beispielsweise die Kursivschreibweise. Wegen der vielen Kombinationsmöglichkeiten bietet die Klasse Font insgesamt 14 Konstruktoren an, die den unterschiedlichen Ansprüchen genügen. Drei möchte ich Ihnen an dieser Stelle exemplarisch vorstellen:


public Font(Font, FontStyle);
public Font(string, float);
public Font(string, float, FontStyle);

Sehen wir uns den ersten Konstruktor an, dem im ersten Parameter die Referenz auf ein Font-Objekt übergeben wird. Dabei könnte es sich beispielsweise um die Rückgabe der Eigenschaft Font eines Objekts handeln. Im zweiten Parameter wird der Schriftstil festgelegt, der auf der Enumeration FontStyle basiert.


Tabelle 15.7   Die Enumeration »FontStyle«

FontStyle-Mitglied Beschreibung
Bold Fett formatierter Text
Italic Kursiv formatierter Text
Regular Normaler Text
Strikeout Durchgestrichener Text
Underline Unterstrichener Text

Angenommen wir wollen die aktuelle Schriftdarstellung auf der Arbeitsfläche einer Form, die mit frm referenziert wird, in eine fett formatierte Ausgabe ändern. Die Anweisung dazu sieht wie folgt aus:


frm.Font = new Font(frm.Font, FontStyle.Bold);

Wenn Sie in die .NET-Dokumentation schauen, werden Sie feststellen, dass die FontStyle-Enumeration über das Flags-Attribut verfügt und somit jede Konstante der Enumeration durch ein bestimmtes Bit beschrieben wird. Eine gegebene Schrift kann damit gleichzeitig mehrere der in FontStyle definierten Charakteristika aufweisen. Das ist auch richtig, denn zweifelsfrei kann eine Schrift sowohl kursiv als auch fett sein.

Soll eine Schrift mehrere Merkmale gleichzeitig aufweisen, müssen die einzelnen Enumerations-Mitglieder nur mit dem bitweisen OR-Operator verknüpft werden:


myForm.Font = new Font(myForm.Font, FontStyle.Bold |  FontStyle.Italic);

Die Schrift, die jetzt in myForm dargestellt wird, ist sowohl fett als auch kursiv. Schriftart und -größe entsprechen der ursprünglichen Schrift.

Interessant wird es, innerhalb einer Anweisung eine der Schrifteigenschaften zu invertieren, den Wert also genau umzukehren. Nehmen wir beispielsweise an, Sie möchten erreichen, dass eine Schrift, die aktuell fett angezeigt wird, in Normaldarstellung ausgegeben wird. Bold ist zwar eine Eigenschaft der Klasse Font (wie auch Italic, Strikeout und Underline), hat jedoch keinen set-Accessor und kann daher nicht direkt verändert werden. Der Weg zum Ziel führt nur über den Konstruktor der Font-Klasse:


frm.Font = new Font(frm.Font, frm.Font.Style ^ FontStyle.Bold);

Dem ersten Parameter wird hier die aktuelle Schrift übergeben. Um den zweiten mit dem richtigen Wert zu füttern, wird zunächst die augenblickliche FontStyle-Einstellung abgefragt. Mit dem XOR-Operator (»^«) verknüpfen wir diesen Wert noch mit der Bitsequenz für die fette Schriftdarstellung: Das von FontStyle.Bold beschriebene Bit wird anschließend innerhalb der Bitsequenz FontStyle invertiert.

Schreiben von Text in eine Form

Das nachfolgende Beispiel gibt im Arbeitsbereich eines Fensters eine Zeichenfolge aus, wenn in den Arbeitsbereich geklickt wird. Ein wiederholtes Klicken bewirkt, dass sich die Fett- und Kursivdarstellung der Zeichenfolge ändert.

Um die Ausgabe einer Zeichenfolge im Arbeitsbereich des Fensters zu erreichen, müssen wir thematisch etwas vorgreifen und mit Typen arbeiten, die erst weiter hinten in diesem Buch behandelt werden. Aber sehen wir uns zuvor den Code an.


// --------------------------------------------------------------
// Beispiel: ...\Kapitel 15\EditFont
// --------------------------------------------------------------
public partial class Form1 : Form {
  private Font newFont = new Font("Arial", 24);
  private void Form1_Click(object sender, EventArgs e) {
    newFont = new Font(newFont, newFont.Style ^ FontStyle.Bold ^ FontStyle.Italic);
    Graphics graph = this.CreateGraphics();
    this.Refresh();
    graph.DrawString("Visual C# macht Spaß!", newFont, Brushes.Blue, 0, 0);
  }
}

Der Programmcode konzentriert sich aufgrund der Aufgabenstellung auf den Ereignishandler des Click-Ereignisses der Form. Auf Klassenebene ist nur noch die Variable newFont vom Typ Font deklariert. Das Feld beschreibt die Schriftart »Arial« in einer Größe von 24 Punkten und speichert die aktuelle Einstellung der Schrift, in der die Zeichenfolge ausgegeben wird.

Im Ereignishandler wird zuerst die aktuelle fette und kursive Darstellung invertiert und in newFont gespeichert. Mit der Methode CreateGraphics des Form-Objekts besorgen wir uns anschließend die Referenz auf das Graphics-Objekt unserer Form:


Graphics graph = this.CreateGraphics();

Graphics ist eine wichtige Klasse des .NET Frameworks, weil sie die Methoden zur Ausgabe von Grafiken und Text auf einer Komponente, also auch der Form, bereitstellt. Im Beispielcode wird die Methode DrawString zum Zeichnen eines Strings benutzt.


public void DrawString(string, Font, Brush, float, float);

Der erste Parameter erwartet die zu zeichnende Zeichenfolge, der zweite legt das Textformat der Zeichenfolge durch den Typ Font fest. Der dritte Parameter vom Typ Brush ähnelt dem Typ Color, weist aber über die Farbgebung hinaus weitergehende Zeichendarstellungsmöglichkeiten auf. Im Code haben wir diesem Parameter einen als statische Eigenschaft definierten Farbwert der Klasse Brushes übergeben. Die letzten beiden Parametern erwarten die Angabe des linken oberen Ursprungspunktes des zu zeichnenden Textes.

Damit die alte Zeichenfolgedarstellung beim erneuten Klicken auf die Form gelöscht und nicht nur überlagert wird, muss der Arbeitsbereich vor der Neudarstellung mit Refresh gesäubert werden.

Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 15.11   Ausgabe des Beispiels »EditFont«

Alle lokal installierten Fonts anzeigen

Eine Zeichenfolge in einer bestimmten Schriftart anzuzeigen setzt natürlich voraus, dass diese auch tatsächlich installiert ist. Das kann aber von Rechner zu Rechner, abhängig von der installierten Software, durchaus sehr unterschiedlich sein. Woher können wir diese Information beziehen?

Die .NET-Klassenbibliothek hat wie selbstverständlich eine Lösung anzubieten: Es ist die Klasse InstalledFontCollection im Namespace System.Drawing.Text. Eine Instanz dieses Typs liefert über die Eigenschaft Families ein Array von FontFamily-Objekten. Jedes dieser Objekte veröffentlicht über seine Name-Eigenschaft den uns bekannten Bezeichner der Schriftart.

Das folgende Beispiel gibt die Liste der installierten Fonts als Text im Clientbereich der Form aus. Sicher würde man dazu in der Praxis ein Steuerelement einsetzen, das zu diesem Zweck bedeutend besser geeignet ist. Aber weil wir mit unseren Möglichkeiten noch nicht so weit vorgedrungen sind, wollen wir uns auch schon mit dieser etwas einfacheren Ausgabe zufrieden geben.

 

 


// --------------------------------------------------------------
// Beispiel: ...\Kapitel 15\InstallierteFonts
// --------------------------------------------------------------
private void Form1_Click(object sender, EventArgs e) {
  // InstalledFontCollection liefert alle auf der aktuellen 
  // Maschine installierten Schriftarten
  InstalledFontCollection fontCol = new InstalledFontCollection();
  // Array aller installierten Fonts abrufen
  FontFamily[] fontArr = fontCol.Families;
  string result = "";
  // das Array durchlaufen und aus den Namen der Fonts eine Zeichenfolge bilden
  for (int i = 0; i < fontArr.Length; i++) {
    result += fontArr[i].Name + "\n";
  }
  // Ausgabe in der Form
  Graphics graph = this.CreateGraphics();
  graph.DrawString(result, this.Font, Brushes.Black, 0, 0);
}

Zuerst wird eine Instanz der Klasse InstalledFontCollection erzeugt, die uns mit den gewünschten Informationen versorgt. Im nächsten Schritt wird deren Families-Eigenschaft abgerufen, die ein Array vom Typ FontFamily liefert. Jedes FontFamily-Objekt beschreibt eine der installierten Schriftarten. Den Bezeichner der Schriftart erhalten wir, wenn wir die Eigenschaft Name jedes FontFamily-Objekts abrufen. Das geschieht in einer Schleife.

Alle Fontbezeichner werden in der Variablen result, getrennt durch einen Zeilenumbruch, gesammelt und danach mit der Methode DrawString in den Arbeitsbereich der Form gezeichnet.

Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 15.12   Ausgabe des Beispiels »InstallierteFonts«


Galileo Computing

15.6.9 Die Abmessungen einer Form festlegen  downtop

Die äußere Abmessung einer Form kann mit den folgenden Eigenschaften beschrieben werden:

gp  Size
gp  Height und Width

Size gestattet, in einer Anweisung gleichzeitig Breite und Höhe des Fensters in Pixel festzulegen. Diese Eigenschaft ist vom Typ der gleichnamigen Struktur Size. Übergibt man der Eigenschaft einen neuen Wert, bietet es sich an, einen passenden Konstruktor aufzurufen, z.B.:


this.Size = new Size(600, 400);

Dieselbe Fenstergröße erzielen Sie, wenn den beiden Eigenschaften Width und Height die Größenangaben einzeln übergeben werden:


this.Width = 600;
this.Height = 400;

Sie werden die Eigenschaften Width und Height nicht im Eigenschaftsfenster finden. Dennoch können Sie sie im Code manipulieren.


Hinweis   Width und Height sind nicht die einzigen Eigenschaften, die nicht im Eigenschaftsfenster angezeigt werden, denn grundsätzlich gibt es keine Vorschrift, die besagt, dass alle Eigenschaften eines Typs hier angeboten werden müssen. Wir werden uns später noch mit der Entwicklung benutzerdefinierter Steuerelemente beschäftigen. Dort werden Sie erfahren, dass die Anzeige im Eigenschaftsfenster sogar ausdrücklich festgelegt werden muss.

Größe einer Form begrenzen

Wollen Sie verhindern, dass der Anwender eine Form zur Laufzeit über ein bestimmtes Maß hinaus vergrößert oder verkleinert, stellen Sie die Eigenschaften MinimumSize und MaximumSize auf die gewünschten Grenzwerte ein.


Galileo Computing

15.6.10 Die Position eines Fensters  downtop

Um ein Fenster an einer bestimmten Position des Bildschirms anzuzeigen, stehen mehrere Eigenschaften zur Verfügung:

gp  StartPosition
gp  Location
gp  Left und Top

Die Startposition eines Fensters auf dem Bildschirm wird mit der Eigenschaft StartPosition festgelegt. Dazu wird der Eigenschaft ein Wert aus der Enumeration FormStartPosition übergeben.


Tabelle 15.8   Die »FormStartPosition«-Enumeration

FormStartPosition-Member Beschreibung
CenterParent Das Formular wird innerhalb eines übergeordneten Formulars zentriert.
CenterScreen Das Formular wird auf dem Bildschirm zentriert angezeigt.
Manual Die Position des Formulars wird durch die Einstellung der Eigenschaft Location festgelegt.
WindowsDefaultBounds Das Formular wird an der Windows-Standardposition positioniert. Die Größe wird von Windows festgelegt, die Einstellungen der Eigenschaften Width/Height bzw. Size der Form werden ignoriert.
WindowsDefaultLocation Das Formular wird an der Windows-Standardposition positioniert. Die Größe der Form entspricht den Einstellungen in Width/Height bzw. Size. Diese Einstellung ist der Standard.

Zu Beginn einer Windows-Sitzung wird das erste Programmfenster in der linken oberen Ecke des Bildschirms positioniert, jedes weitere um einen bestimmten Betrag weiter rechts unten. Das ist die Vorgabe, wenn nichts anderes bestimmt wird. Dieses Positionierungsverhalten wird durch die beiden Einstellungen WindowsDefaultBounds und WindowsDefaultLocation beschrieben. Beide unterscheiden sich nur darin, in welcher Größe ein Formular nach dem Start angezeigt wird. Wählen Sie WindowsDefaultBounds, werden alle weiteren Angaben bezüglich Position und Größe ignoriert, mit WindowsDefaultLocation wird die Größe der Form aus den Einstellungen der Eigenschaften Width und Height berücksichtigt.

Öffnen wir ein Fenster aus einem anderen heraus – es könnte sich zum Beispiel um ein Dialogfenster handeln –, ist insbesondere die Einstellung CenterParent interessant: Der Dialog wird genau mittig über dem aufrufenden positioniert. CenterScreen positioniert eine Form in der Mitte des Bildschirms.

Legen Sie Manual fest, können Sie sowohl die Größe als auch die Position nach eigenem Ermessen festlegen. Location beschreibt dazu die x- und y-Position der Form nach dem Start. Die Angaben sind in Pixel und beziehen sich auf die Position der linken oberen Ecke der Form bezüglich des Ursprungspunktes des Bildschirms (0, 0). Dieser befindet sich in der linken oberen Ecke des Bildschirms.

Left legt den Abstand zwischen dem linken Rand des Fensters und des Bildschirms fest, Top den Abstand zum oberen Rand. Auch diese Eigenschaften werden nicht im Eigenschaftsfenster angeboten. Nichtsdestotrotz sind beide öffentlich. Darüber hinaus gibt es noch zwei ähnliche, positionsbeschreibende Eigenschaften: Right und Bottom, die allerdings schreibgeschützt sind.

Möchten Sie sowohl die Größe als auch die Position eines Fensters gleichzeitig verändern, müssen Sie nicht mehrere Eigenschaftsaufrufe starten, sondern können entweder mit der Eigenschaft Bounds oder mit der Eigenschaft DesktopBounds eine einzeilige Anweisung codieren. Beide sind vom Typ Rectangle und definieren das Fenster als Rechteck einer vorgegebenen Größe an einer bestimmten Position. Mit


this.DesktopBounds = new Rectangle(100, 120, 600, 450);

wird beispielsweise ein Fenster mit den Abmessungen 600 x 450 Pixel beschrieben, das zum linken Rand des Bildschirms einen Abstand von 100 Pixel aufweist und zum oberen Rand einen Abstand von 120 Pixel.


Hinweis   Wollen Sie die Größe oder die Position eines Fensters ändern, müssen Sie nicht unbedingt Eigenschaftswerte neu festlegen. Es bieten sich hierzu auch die Methoden SetDesktopLocation und SetDesktopBounds an, die dasselbe bewirken.


Galileo Computing

15.6.11 Der Anzeigezustand eines Fensters nach dem Öffnen  downtop

Die Größe eines Fensters ist nach dem Öffnen so, wie es in der Eigenschaft Size beschrieben wird. Es ist der Normalzustand. Darüber hinaus können Sie aber auch schon beim Öffnen einer Form oder auch später zur Laufzeit einen anderen Zustand festlegen. Zur Auswahl steht noch die maximierte und die minimierte Anzeige. Festgelegt wird das in der Eigenschaft WindowState, die einen der drei Werte aus der Enumeration FormWindowState annehmen kann, die in Tabelle 15.9 aufgeführt sind.


Tabelle 15.9   Die Enumeration »FormWindowState«

FormWindowState-Konstante Beschreibung
Maximized Das Fenster wird maximiert angezeigt.
Minimized Das Fenster wird minimiert angezeigt.
Normal Das Fenster wird in seiner Standardgröße angezeigt.


Galileo Computing

15.6.12 Die Arbeitsfläche des Fensters (der Clientbereichdowntop

Die weiter oben beschriebenen Eigenschaften zur Festlegung der Größe eines Formulars beziehen sich auf die Außenabmessungen, also einschließlich Rand und Titelleiste. Fügen Sie einer Form Steuerelemente hinzu oder rufen Sie eine grafische Methode auf, um in die Form zu zeichnen, spielen die Außenabmessungen keine Rolle, denn diese Elemente können nur den standardmäßig grauen Arbeitsbereich der Form für sich in Anspruch nehmen. Dieser wird durch die Eigenschaft ClientSize beschrieben und berücksichtigt weder den Außenrahmen noch die Titelleiste. Die Eigenschaft ist ebenfalls vom Typ Size, der die Breite und die Höhe über Width und Height beschreibt. Wird zur Laufzeit der Anwendung der Eigenschaft ClientSize ein anderer Wert zugewiesen, passen sich die Außenabmessungen der Form an die neue Vorgabe an, weil Rahmen und Titelleiste immer konstant sind.


Galileo Computing

15.6.13 Die Auflistung »ControlsCollection«  downtop

Eine Form zählt zu den Komponenten, die ihrerseits weitere Komponenten (Steuerelemente) beherbergen können. Mit dieser Fähigkeit sind unter anderem auch GroupBox und Panel ausgestattet. Diese Typen haben eines gemeinsam: die Eigenschaft Controls. Damit wird die Referenz auf eine Auflistung vom Typ Control.ControlCollection veröffentlicht, in der die vom Container beherbergten Steuerelemente verwaltet werden. Wir haben es hier zum ersten Mal mit einer verschachtelten Klassendefinition zu tun, denn die Klasse ControlCollection ist innerhalb der Klasse Control definiert.

Die Zugehörigkeit eines Steuerelements zu einer ControlCollection ist von elementarer Bedeutung. Nehmen wir an, Sie hätten einen Button wie folgt instanziiert:


Button btn = new Button();

Damit ist aber noch keine Anzeige zur Laufzeit garantiert, denn es fehlt der Schaltfläche noch eine Voraussetzung: Der Button muss einer ControlCollection hinzugefügt werden – entweder der der Form oder der eines anderen Containers. Damit ein Container wie beispielsweise eine GroupBox in einer Form angezeigt werden kann, muss die GroupBox ihrerseits Mitglied der ControlCollection der Form sein. So schließt sich der Kreis und kann infolgedessen zu einer tief verschachtelten Auflistungshierarchie führen.

Jede ControlCollection hat die üblichen Methoden einer indexbasierten Auflistung zum Hinzufügen, Löschen und für den Zugriff auf die Elemente (Add, Remove, Clear ...). Mit


this.Controls.Add(btn);

würde die oben instanziierte Schaltfläche also der Steuerelementauflistung der Form hinzugefügt und zur Laufzeit wunschgemäß angezeigt.

Solange Sie den Forms-Designer benutzen, werden Sie ziemlich selten mit der ControlCollection in Berührung kommen, denn alles Notwendige erledigt das Visual Studio. Sie finden den entsprechenden Programmcode in der Methode InitializeComponent. Sie können die Auflistung aber jederzeit manipulieren, um zur Laufzeit dynamisch Steuerelemente zu erzeugen und danach ein- oder auszublenden – beispielsweise wenn die Form den aktuellen Bedingungen angepasst werden muss.


Galileo Computing

15.6.14 Zusammenfassung der Eigenschaften des Form-Objekts  toptop

Sie haben jetzt einige Eigenschaften eines Form-Objekts kennen gelernt. Es gibt noch eine große Zahl weiterer, auf die wir hier aus Platzgründen nicht weiter eingehen können. Ich möchte Sie aber dazu ermuntern, mit der einen oder anderen Eigenschaft durchaus ein wenig zu experimentieren. Das gilt im Übrigen auch für die Eigenschaften der Controls, denen wir uns später noch widmen werden. Meist können Sie aufgrund des gewählten Eigenschaftsnamens schon die Fähigkeiten, die sich dahinter verbergen, erahnen.

Alle bisher besprochenen Eigenschaften finden Sie zusammenfassend in der folgenden Tabelle. Sie werden im weiteren Verlauf dieses Buches noch einige weitere Eigenschaften kennen lernen, die in dieser Tabelle der Übersicht wegen aber noch nicht enthalten sind.


Tabelle 15.10   Eigenschaften der Klasse »Form« (Auszug)

Eigenschaft Typ Beschreibung
BackColor Color Beschreibt die Hintergrundfarbe der Form.
Bounds Rectangle Legt die Größe und Position einer Form fest.
ClientSize Size Legt die Größe des Clientbereichs einer Form fest.
ControlBox bool Gibt an, ob in der Titelleiste das Systemmenüfeld angezeigt wird.
Controls Control.Control-Collection Liefert die Referenz auf eine Auflistung aller Steuerelemente, die in einem Container (hier der Form) enthalten sind.
Cursor Cursor Legt den Cursor fest.
DesktopBounds Rectangle Ruft Größe und Position der Form auf dem Windows-Desktop ab.
Font Font Legt die Schrift für den Clientbereich und die untergeordneten Controls fest.
ForeColor Color Beschreibt die Vordergrundfarbe.
FormBorderStyle FormBorderStyle Legt die Rahmenart der Form fest.
Height int Legt die Höhe fest.
Icon Icon Legt das Symbol für die Form fest.
Left int Legt den Abstand vom linken Rand der Form zum linken Rand des Bildschirms in Pixel fest.
Location Point Beschreibt die Koordinaten der linken oberen Ecke der Form relativ zur linken oberen Ecke des Bildschirms.
MaximizeBox bool Legt fest, ob die Maximieren-Schaltfläche in der Titelleiste angezeigt wird.
MaximumSize Size Legt die Maximalgröße der Form fest.
MinimizeBox bool Legt fest, ob die Minimieren-Schaltfläche in der Titelleiste angezeigt wird.
MinimumSize Size Legt die Minimalgröße der Form fest.
Opacity double Beschreibt die Durchlässigkeit einer Form.
ShowInTaskbar bool Gibt an, ob die Form in der Taskleiste abgelegt werden kann.
Size Size Legt die Größe der Form fest.
StartPosition FormStartPosition Legt die Position des Fensters zur Laufzeit fest.
Top int Legt den Abstand vom oberen Rand der Form zum oberenRand des Bildschirms in Pixel fest.
TopMost bool Gibt an, ob die Form in der Anwendung als oberstes Fenster angezeigt werden soll.
TransparencyKey Color Beschreibt, die Farbe für die transparente Anzeige der Form.
UseWaitCursor bool Legt fest, ob die Sanduhr als Mauszeiger angezeigt werden soll oder nicht.
Width int Legt die Breite fest.
WindowState FormWindowState Legt den Anzeigestatus des Fensters fest.

 << zurück
  
  Zum Katalog
Zum Katalog: Visual C# 2005
Visual C# 2005
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Fortgeschrittene Programmierung mit Visual C# 2005






 Fortgeschrittene
 Programmierung
 mit Visual C# 2005


Zum Katalog: Einstieg in Visual C# 2005






 Einstieg in
 Visual C# 2005


Zum Katalog: Einstieg in Visual Basic 2005






 Einstieg in
 Visual Basic 2005


Zum Katalog: Visual Basic 2005






 Visual Basic 2005


Zum Katalog: Java ist auch eine Insel






 Java ist auch eine
 Insel


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de